今天要來談談特徵工程,Ferris 直接不當螃蟹了🤣
昨天談到了關於資料本身的各個面向,而有了良好的訓練集之後,我們就可以開始思考如何對其進行特徵工程。
但提到特徵工程,我想還是很多孩子想問:
*圖片來源:Week 1 – Lecture: History, motivation, and evolution of Deep Learning
雖然前年解釋過了,但上圖是大神 Yann LeCun 對機器學習與深度學習差別的解釋,這讓很多人 (與我) 誤會深度學習模型不需要特徵工程。
的確,深度學習模型可以自動學習特徵,但這並不意味著特徵工程就沒有必要了。
在資料集較小時,特徵工程仍然可以幫助模型提高性能。透過錯誤分析,我們可以了解模型的弱點,並設計特徵來彌補這些弱點。尤其是對於結構化資料,特徵工程可以幫助我們更好地理解數據的內在結構,從而設計出更有效的特徵。
因此,我們不能排斥特徵工程。即使是使用深度學習模型,也應該進行適當的特徵工程,以提高模型的性能。
以下是一些具體的例子:
雖然沒有幫助,但讓大家看看 Yoda LeCun:
*From this X
如上所述,在產品環境中進行特徵工程 (或説建立訓練集) 時最常遇到的應該就是處理缺失值了。
大家也都知道要處理缺失值,但可能不知道缺失值不是都一樣的,就像人的性格一樣,以下是缺失值的三種類型:
所以在處理缺失值時,需要根據不同的情況選擇不同的方法,一般通常會採取刪除或填補的方法來處理:
而在談到特徵工程時,我們可能更常會理解為設計新的特徵或變量來改進模型的性能。
特徵工程是一個複雜的過程,需要結合具體的任務和數據集來進行,以下是特徵工程的一些常見方法:
特徵工程可以幫助我們提高模型的性能,但它也可能增加模型的複雜性,使模型更難解釋。因此,在進行特徵工程時需要謹慎。
事實上,如何設計良好的特徵是一個複雜的問題,沒有萬無一失的答案。
學習的最佳方式是通過經驗:嘗試不同的特徵並觀察它們如何影響模型的性能。
或是向專家學習,例如閱讀 Kaggle 競賽獲勝團隊如何設計其特徵以了解其技術和他們經歷的考慮因素非常有用。
由於當今的 ML 系統成功與否依然取決於其特徵,因此對於希望在產品中使用機器學習的孩子來說,投資時間和精力進行特徵工程非常重要。
特徵工程通常需要專業知識,而專業知識專家可能並不總是工程師,因此設計工作流程以允許非工程師參與該過程非常重要。
以下是一些特徵工程最佳實踐的總結:
有了良好的特徵集,我們就可以進入工作流程的下一部分:訓練機器學習模型。
在繼續之前,我必須再次強調,開始建模並不代表我們完成了資料處理或特徵工程。
在大多數現實世界的 ML 專案中,資料收集和特徵工程的過程會一直持續到模型投入生產,而我們也需要用新的資料來改善模型,所以再複習一次 ML 產品生命週期吧:
*圖片修改自 Introduction to Machine Learning in Production
上面說的是理論部分,明天還要探索 Rust 在資料處理與特徵工程時可以如何應用,明天見囉!